// components/image-uploader/image-uploader.ts
import { uploadProductImage } from '../../api/upload.js'
import { uploadEnterpriseLogo } from '../../api/enterprise.js'

interface ImageFile {
  url: string;
  path?: string;
}

Component({
  /**
   * 组件的属性列表
   */
  properties: {
    // 已上传的图片列表
    images: {
      type: Array,
      value: []
    },
    // 最大上传数量
    maxCount: {
      type: Number,
      value: 3
    },
    // 是否显示提示文字
    showHint: {
      type: Boolean,
      value: true
    },
    // 提示文字
    hintText: {
      type: String,
      value: '最多上传3张图片，支持JPG、PNG格式，每张不超过5MB'
    },
    // 上传按钮文字
    uploadText: {
      type: String,
      value: '添加图片'
    },
    // 上传类型：product(产品图片) 或 logo(企业Logo)
    uploadType: {
      type: String,
      value: 'product'
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    uploading: false
  },

  /**
   * 组件的方法列表
   */
  methods: {
    // 选择并上传图片
    async chooseAndUploadImage() {
      const currentImages = this.properties.images as ImageFile[];
      const maxCount = this.properties.maxCount;

      if (currentImages.length >= maxCount) {
        wx.showToast({
          title: `最多只能上传${maxCount}张图片`,
          icon: 'none'
        });
        return;
      }

      try {
        const res = await wx.chooseImage({
          count: maxCount - currentImages.length,
          sizeType: ['compressed'],
          sourceType: ['album', 'camera']
        }) as any;

        const tempFilePaths = res.tempFilePaths;

        // 检查是否真的选择了图片
        if (!tempFilePaths || tempFilePaths.length === 0) {
          console.log('未选择图片');
          return;
        }

        this.setData({ uploading: true });
        wx.showLoading({ title: '上传中...' });

        console.log('选择结果:', tempFilePaths);

        // 根据上传类型选择不同的上传函数
        const uploadFunction = this.properties.uploadType === 'logo' ? uploadEnterpriseLogo : uploadProductImage;

        // 批量上传图片
        const uploadPromises = tempFilePaths.map((filePath: string) => {
          console.log('开始上传图片:', filePath);
          return uploadFunction(filePath)
            .then(result => {
              console.log('单个图片上传成功:', result);
              return result;
            })
            .catch(error => {
              console.error('单个图片上传失败:', error);
              return { code: -1, error: error };
            });
        });
        
        const uploadResults = await Promise.all(uploadPromises);
        console.log('所有上传结果:', uploadResults);

        wx.hideLoading();

        // 收集成功上传的图片完整数据
        const newImageData: any[] = [];

        uploadResults.forEach((result, index) => {
          if (result.code === 200 && result.data && result.data.url) {
            // 保存完整的 data 对象
            newImageData.push(result.data);
          } else {
            console.warn('图片上传失败:', result);
          }
        });

        if (newImageData.length > 0) {
          // 合并已有图片和新上传的图片
          const allImageData = [...currentImages, ...newImageData];
          
          // 触发上传成功事件，传递完整的图片数据
          this.triggerEvent('upload-success', {
            newImages: newImageData,        // 本次上传的图片数据（完整 data 对象）
            allImages: allImageData,         // 所有图片数据（完整 data 对象）
            newImageUrls: newImageData.map(img => img.url),  // 本次上传的 URL 列表
            allImageUrls: allImageData.map(img => img.url || img)  // 所有 URL 列表
          });

          wx.showToast({
            title: `成功上传${newImageData.length}张图片`,
            icon: 'success'
          });
        } else {
          wx.showToast({
            title: '图片上传失败，请重试',
            icon: 'none'
          });
        }

        this.setData({ uploading: false });
      } catch (error: any) {
        console.error('上传产品图片失败:', error);
        this.setData({ uploading: false });
        wx.hideLoading();

        // 如果是用户取消操作，不显示错误提示
        if (error.errMsg && (error.errMsg.includes('cancel') || error.errMsg.includes('fail'))) {
          console.log('用户取消选择图片');
          return;
        }

        wx.showToast({
          title: '上传失败，请重试',
          icon: 'none'
        });
      }
    },

    // 预览图片
    previewImage(e: any) {
      const index = e.currentTarget.dataset.index;
      const images = this.properties.images as ImageFile[];
      const urls = images.map(img => img.url);
      
      wx.previewImage({
        current: urls[index],
        urls: urls
      });
    },

    // 删除图片
    removeImage(e: any) {
      const index = e.currentTarget.dataset.index;
      const images = this.properties.images as ImageFile[];
      const remainingImages = images.filter((_, i) => i !== index);
      
      // 触发删除事件
      this.triggerEvent('remove', {
        index: index,
        removedImage: images[index],           // 被删除的图片数据
        remainingImages: remainingImages,      // 剩余的图片数据（完整对象）
        remainingImageUrls: remainingImages.map(img => img.url || img)  // 剩余的 URL 列表
      });
    }
  }
});

